package com.wenhao.function;

import org.junit.jupiter.api.Test;

import java.util.Date;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * 函数式接口：只有一个方法的接口
 *
 * 四大函数式接口
 * Consumer
 * Function
 * Predicate
 *
 *
 * @author Wenhao Tong
 * @create 2021-08-20 16:33
 */
public class FunctionDemo {
    public static void main(String[] args) {
        //
        Function<Integer, Integer> function = (a) -> {
            return a * 2;
        };
        System.out.println(function.apply(1));
    }

    /**
     * 函数式接口
     * 一个参数，一个返回值
     */
    @Test
    public void test1 () {
        Function<Integer, Integer> function = (a) -> a * 2;
        System.out.println(function.apply(1));
    }

    /**
     * 断定性接口
     * 一个参数，返回值为boolean
     */
    @Test
    public void test2 () {
        Predicate<Integer> predicate = (a) -> a == 1;
        System.out.println(predicate.test(1));
    }

    /**
     * 消费型接口
     * 一个参数，没有返回值
     */
    @Test
    public void test3 () {
        Consumer<String> consumer = (s) -> System.out.println(s);
        consumer.accept("hello");
    }

    /**
     * 供给型接口
     * 没有参数，有返回值
     */
    @Test
    public void test4 () {
        Supplier<Date> supplier = () -> new Date();
        System.out.println(supplier.get());
    }
}
